iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0

那今天來做開始結束按鈕。

font = pygame.font.SysFont(None, 55)
def display_message(text, color, y_displace=0):
    text_surface = font.render(text, True, color)
    text_rect = text_surface.get_rect(center=(screen_width // 2, screen_height // 2 + y_displace))
    screen.blit(text_surface, text_rect)

def draw_button(text, rect, color, hover_color):
    mouse_pos = pygame.mouse.get_pos()
    if rect.collidepoint(mouse_pos):
        pygame.draw.rect(screen, hover_color, rect)
    else:
        pygame.draw.rect(screen, color, rect)

    text_surface = font.render(text, True, black)
    text_rect = text_surface.get_rect(center=rect.center)
    screen.blit(text_surface, text_rect)

def wait_for_button_click(button_rect):
    waiting = True
    while waiting:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                if button_rect.collidepoint(event.pos):
                    waiting = False
        pygame.display.flip()

start_button_rect = pygame.Rect(screen_width // 2 - 100, screen_height // 2 - 50, 200, 100)
restart_button_rect = pygame.Rect(screen_width // 2 - 150, screen_height // 2, 300, 100)

screen.fill(white)
draw_button("Start", start_button_rect, button_color, button_hover_color)
pygame.display.flip()
wait_for_button_click(start_button_rect)

screen.fill(white)
display_message("Game Over", black, -50)
draw_button("Restart", restart_button_rect, button_color, button_hover_color)
pygame.display.flip()
wait_for_button_click(restart_button_rect)
  • 字體設置:使用 pygame.font.SysFont(None, 55) 設置字體大小。
  • display_message 函數:使用 font.render() 生成文字表面,再用 get_rect() 設置文字的居中位置。
    可以自訂文字內容、顏色及垂直位置偏移。
  • draw_button 函數:利用 pygame.mouse.get_pos() 獲取滑鼠位置,並用 collidepoint() 判斷滑鼠是否在按鈕範圍內。如果滑鼠懸停在按鈕上,按鈕會變換顏色(hover_color)。
  • wait_for_button_click 函數:進入循環等待玩家的點擊事件,使用 pygame.event.get() 檢測事件。
    當玩家點擊按鈕後,結束等待並繼續執行後續邏輯。
  • 按鈕的位置信息:start_button_rect 定義了“Start”按鈕的位置及大小。restart_button_rect 定義了“Restart”按鈕的位置及大小。
  • 顯示流程:在遊戲開始前,螢幕顯示“Start”按鈕,並等待玩家點擊以開始遊戲。遊戲輸時,螢幕顯示“Game Over”訊息,並有“Restart”按鈕等待玩家點擊以重新開始。

這邊有參考一些網路上的開始與結束的程式編輯,再加上我自己的需求,做出了目前這個版本的開始與結束,中間出了蠻多差錯,但都有一一修正,最好笑的是在用 VS Code 的時候我按鈕打中文,他跑出幾個方塊,我還一直在想說為什麼無法正常顯示,結果最後用英文就解決了。/images/emoticon/emoticon36.gif
那今天就先這樣。/images/emoticon/emoticon29.gif


上一篇
繪製遊戲畫面
下一篇
增加關卡
系列文
從Python入門到自製遊戲:30天鐵人挑戰之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言